package cn.iocoder.yudao.module.system.service.task;

import cn.iocoder.yudao.module.system.controller.admin.task.vo.TaskStatusRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.task.UserTaskRecordDO;
import cn.iocoder.yudao.module.system.enums.task.TaskTypeEnum;

import java.util.List;

/**
 * 用户任务 Service 接口
 *
 * @author 芋道源码
 */
public interface UserTaskService {

    /**
     * 完成分享任务
     *
     * @param userId 用户ID
     * @return 是否成功完成任务（今日首次完成返回true，重复完成返回false）
     */
    boolean completeShareTask(Long userId);

    /**
     * 完成邀请好友任务
     *
     * @param userId 用户ID
     * @return 是否成功完成任务
     */
    boolean completeInviteFriendTask(Long userId);

    /**
     * 完成个人信息完善任务
     *
     * @param userId 用户ID
     * @return 是否成功完成任务
     */
    boolean completeProfileTask(Long userId);

    /**
     * 完成任务
     *
     * @param userId 用户ID
     * @param taskType 任务类型
     * @return 是否成功完成任务
     */
    boolean completeTask(Long userId, TaskTypeEnum taskType);

    /**
     * 检查用户今日是否已完成指定任务
     *
     * @param userId 用户ID
     * @param taskType 任务类型
     * @return 是否已完成
     */
    boolean hasCompletedTaskToday(Long userId, TaskTypeEnum taskType);

    /**
     * 获取用户今日通过任务获得的抽奖次数
     *
     * @param userId 用户ID
     * @return 抽奖次数
     */
    int getTodayTaskLotteryCount(Long userId);

    /**
     * 获取用户任务记录
     *
     * @param userId 用户ID
     * @return 任务记录列表
     */
    List<UserTaskRecordDO> getUserTaskRecords(Long userId);

    /**
     * 获取用户所有任务状态
     *
     * @param userId 用户ID
     * @return 任务状态列表
     */
    List<TaskStatusRespVO> getUserTaskStatus(Long userId);
}
